#pragma once
#include <QJsonArray>
#include <QString>

class Command {
 public:
  enum class CmdTag : char { kNone, kHot, kNew };
  Command() = default;
  Command(int id, const QString& name, int baseCmd = 0);
  bool exec(const QString& paramters) const;
  bool exec();

  const QString& name() { return m_name; }
  const QString& e_name() { return m_e_name; }
  void setName(const QString& n) { m_name = n; }
  void setEName(const QString& en) { m_e_name = en; }
  bool isAuthed();
  void setAuthed(bool auth) { m_is_authed = auth; }

  QString module() const { return m_module; }
  void setModule(const QString& v);
  QString abbr() const { return m_abbr; }
  void setAbbr(const QString& v) { m_abbr = v; }
  // void setCategory(const QString& v) { m_category = v; }
  void setTag(CmdTag tag) { m_tag = tag; }
  CmdTag tag() const { return m_tag; }
  void setParamters(const QString& ja) { m_paramers = ja; }
  QString paramters() { return m_paramers; }
  void setRedPoint(bool is_redpoint) { m_is_redpoint = is_redpoint; }
  bool isRedPoint() { return m_is_redpoint; }
  void commonPage(int id, int ntype);

  bool shouldHide() const { return m_hide; }
  void setHide(bool v) { m_hide = v; }

 private:
  int m_id = 0;
  int m_baseCmd = 0;
  QString m_name, m_e_name;
  QString m_module;
  QString m_abbr;
  // QString m_category;
  CmdTag m_tag = CmdTag::kNone;
  QString m_paramers;
  bool m_is_authed = true;  // TODO
  bool m_is_redpoint = false;
  bool m_hide = false;
};
